Table of contents

  1. The Affordable Care Act

  2. Difference-in-Differences

  3. ACA Data

  4. Medicaid Expansion and Prevalence of Health Insurance

class: inverse, center, middle name: aca

Background on the Affordable Care Act


Background

  1. What percent of people are uninsured?
.plot-callout[ ]
# What percent of people are uninsured?

Background

  1. What percent of people are uninsured?

  2. How do people get health insurance?

.plot-callout[ ]
# How do people get health insurance?

Employer provided insurance

The U.S. still relies heavily on private insurance provided by employers.



Any thoughts on why?
# Employer provided insurance
1. Stabalization act of 1942 (wages frozen but not benefits)
2. Tax exclusion for insurance expenditures (1954)

How did the ACA change things?

  1. Create health insurance exhanges
    • Individual mandate (since set to $0)
    • Premium and cost-sharing subsidies (some unpaid by Trump administration)
    • Insurance subsidies (removed before intended)
    • Decision assistance
    • Minimum benefits and community ratings

  2. Stay on parent’s plan to 26

Change in Insurance Type over Time

What does the literature say

The Kaiser Family Foundation has some great info on this…
- KFF Medicaid Coverage - KFF Report on ACA Expansion - Health Insurance and Mortality (not what we’re discussing here but still important)

class: inverse, center, middle name: dd

Difference-in-Differences


Setup

[:col_header , Post-period, Pre-period] [:col_row Treated, \(E(Y_{1}(1)|W=1)\), \(E(Y_{0}(0)|W=1)\)] [:col_row Control, \(E(Y_{0}(1)|W=0)\), \(E(Y_{0}(0)|W=0)\)]


Strategy 1: Estimate \(E[Y_{0}(1)|W=1]\) using \(E[Y_{0}(0)|W=1]\) (before treatment outcome used to estimate post-treatment)

Setup

[:col_header , Post-period, Pre-period] [:col_row Treated, \(E(Y_{1}(1)|W=1)\), \(E(Y_{0}(0)|W=1)\)] [:col_row Control, \(E(Y_{0}(1)|W=0)\), \(E(Y_{0}(0)|W=0)\)]


Strategy 3: DD estimate…


Estimate \(E[Y_{1}(1)|W=1] - E[Y_{0}(1)|W=1]\) using \(E[Y_{0}(1)|W=0] - E[Y_{0}(0)|W=0]\) (pre-post difference in control group used to predict difference for treatment group)

Estimation

Key identifying assumption is that of parallel trends



\[E[Y_{0}(1) - Y_{0}(0)|W=1] = E[Y_{0}(1) - Y_{0}(0)|W=0]\]
# Estimation Sample means:
\[\begin{align} E[Y_{1}(1) - Y_{0}(1)|W=1] &=& \left( E[Y(1)|W=1] - E[Y(1)|W=0] \right) \\ & & - \left( E[Y(0)|W=1] - E[Y(0)|W=0]\right) \end{align}\]

Estimation

Regression:
\(Y_{i} = \alpha + \beta W_{i} + \lambda 1(Post) + \delta W_{i} \times 1(Post) + \varepsilon\)


[:col_header , After, Before, After - Before] [:col_row Treated, \(\alpha + \beta + \lambda + \delta\), \(\alpha + \beta\), \(\lambda + \delta\)] [:col_row Control, \(\alpha + \lambda\), \(\alpha\), \(\lambda\)] [:col_row Treated - Control, \(\beta + \delta\), \(\beta\), \(\delta\)]

Mean differences

dd.means <- dd.dat %>% group_by(w, t) %>% summarize(mean_y = mean(y.out))
knitr::kable(dd.means, col.names=c("Treated","Post","Mean"), format="html")
Treated Post Mean
FALSE FALSE 1.522635
FALSE TRUE 3.002374
TRUE FALSE 4.515027
TRUE TRUE 12.004623

Naive regression estimator

dd.naive <- lm(y.out ~ w + t, data=dd.dat)
summary(dd.naive)
## 
## Call:
## lm(formula = y.out ~ w + t, data = dd.dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.4972 -1.4983 -0.0086  1.5050  5.1250 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.02919    0.03109   0.939    0.348    
## wTRUE        5.99732    0.03597 166.737   <2e-16 ***
## tTRUE        4.46664    0.03597 124.183   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.798 on 9997 degrees of freedom
## Multiple R-squared:  0.8122, Adjusted R-squared:  0.8121 
## F-statistic: 2.161e+04 on 2 and 9997 DF,  p-value: < 2.2e-16

class: inverse, center, middle name: aca_data

Insurance Data and Medicaid Expansion


Data sources

Code and links available at the Insurance Access GitHub repository

Insurance status and source

Summary stats

And now for some basic summary stats (pooling all years):

stargazer(as.data.frame(ins.dat %>% select(perc_unis, perc_direct, perc_medicaid)), type="html")
## Error: Can't subset columns that don't exist.
## x The column `perc_unis` doesn't exist.

Uninsurance over time

Direct purchase over time

Medicaid enrollment over time

class: inverse, center, middle name: medicaid

Medicaid expansion and health insurance?


Research design

Use pre/post and expansion/non-expansion states to identify effect of Medicaid expansion: \[y_{it} = \alpha + \beta \times 1(Post) + \gamma \times 1(Expand) + \delta \times 1(Post) \times 1(Expand) + \varepsilon\]

Event study

This is poorly named: - In finance, even study is just an interrupted time series - In economics, we usually have a treatment/control group and a break in time

Event study

Second, run regression with full set of interactions and group/year dummies:

event.ins.reg <- lm(perc_unins ~ expand_2012 + expand_2014 + 
                      expand_2015 + expand_2016 + expand_2017 + 
                      expand_2018 + factor(year) + factor(State), data=event.dat)
point.est <- as_tibble(c(event.ins.reg$coefficients[c("expand_2012","expand_2014","expand_2015",
                                            "expand_2016","expand_2017","expand_2018")]),
                       rownames = "term")
ci.est <- as_tibble(confint(event.ins.reg)[c("expand_2012","expand_2014","expand_2015",
                                   "expand_2016","expand_2017","expand_2018"),],
                    rownames = "term")

Event study

Finally, plot coefficients and confidence intervals

.plot-callout[ ]


Event study